This script examines the discharge in Neversink Cr.

This script uses the excel sheet provided in the Eddie module. It is possible to download data from USGS and put it in a new excel sheet following the same format and rename the parts of the script. You can also use the USGS retrieval package to download up to date data directly from USGS.

Install libraries.

These are the libraries that are used in the script. These are installed only once and then can be commented out so they do not run in future execuations of the script.

# https://github.com/USGS-R/dataRetrieval

# general R packages to install if you dont have them
# remove the "#" if you need to run the installations

# install.packages("devtools") # essential in installing other thigs
# install.packages("tidyverse") # installs a lot of things and ggplot
# install.packages("scales") # allows great scale formatting on ggplot
# install.packages("lubridate") # makes working with dates easier
# install.packages("janitor") # clean names of columns and other things
# install.packages("readxl") # read in excel files
# install.packages("plotly") # interactive plots
# install.packages("skimr")
# install.packages("patchwork") # multiple plots

# specific to this module
# install.packages("dataRetrieval") # USGS Data Retreiveal Method

Load Libraries

This code loads the libraries for working with the data

# load these every time  
library(tidyverse) # the tidyverse library with many sub libraries
Registered S3 method overwritten by 'dplyr':
  method           from
  print.rowwise_df     
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
── Attaching packages ───────────────────────────────────── tidyverse 1.3.0 ──
✓ ggplot2 3.2.1     ✓ purrr   0.3.3
✓ tibble  2.1.3     ✓ dplyr   0.8.3
✓ tidyr   1.0.0     ✓ stringr 1.4.0
✓ readr   1.3.1     ✓ forcats 0.4.0
── Conflicts ──────────────────────────────────────── tidyverse_conflicts() ──
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
library(scales) # working with ggplot scales 

Attaching package: ‘scales’

The following object is masked from ‘package:purrr’:

    discard

The following object is masked from ‘package:readr’:

    col_factor
library(lubridate) # working with dates

Attaching package: ‘lubridate’

The following object is masked from ‘package:base’:

    date
library(janitor) # cleans up excel imports

Attaching package: ‘janitor’

The following objects are masked from ‘package:stats’:

    chisq.test, fisher.test
library(readxl) # read in excel files
library(skimr) # does summary stats and other things
library(plotly) # makes interactive plots
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio

Attaching package: ‘plotly’

The following object is masked from ‘package:ggplot2’:

    last_plot

The following object is masked from ‘package:stats’:

    filter

The following object is masked from ‘package:graphics’:

    layout
library(patchwork) # combines many plots together

# # load the USGS package
library(dataRetrieval) # utilities for downloading and working with USGS data

Source of Neversink data

This is the data that is in the excel sheet that is used in this script.
https://waterdata.usgs.gov/ny/nwis/uv/?site_no=01435000&PARAmeter_cd=00065,00060,63160

This is all of the data that is available for the site.
https://waterdata.usgs.gov/nwis/inventory/?site_no=01435000&agency_cd=USGS

Read in USGS Data

This allows you to read in the daily mean data for the USGS site.
Note Enter the following information and you can change this to get different sites or time ranges:
site_no: this is the site that you want to import
par_code: these are the paramter code numbers - 00060 is discharge
You can retreive other variables using:
c(“00060”, “00065”) 00065 gage height start.date:
end.date:


# The site is Neversink and the site number is 01435000
# USGS 01435000 NEVERSINK RIVER NEAR CLARYVILLE NY

site_no <-          "01435000"
par_code <-         "00060"
start.date <-      "1800-01-01"
end.date <-        "2050-01-01"

neversink_daily.df <- readNWISdv(siteNumbers = site_no,
                        parameterCd = par_code,
                        startDate = start.date,
                        endDate = end.date)
  
# rename the columns
neversink_daily.df <- renameNWISColumns(neversink_daily.df)

we need to make a date column to plot with

neversink_daily.df <- neversink_daily.df %>%
  select(agency_cd, 
         site_no, 
         date = Date, 
         discharge_cfs = Flow) 

we need to make a date column to plot with

neversink_daily.df <- neversink_daily.df %>%
  mutate(month = month(date))

Plot all data

q.plot <- neversink_daily.df %>% 
  ggplot(aes(date, discharge_cfs)) +
  geom_point(size=0.1) +
  geom_line()
q.plot

Plot February data

feb.plot <- neversink_daily.df %>% 
  filter(month == 2) %>%
  ggplot(aes(date, discharge_cfs)) +
  geom_point(size = 0.1) +
  geom_line() +
  labs(y="Mean Monthly Discharge m^3/sec", x="Date")
feb.plot

NA

We can make it interactive

ggplotly(feb.plot)

August data

aug.plot <- neversink_daily.df %>%
  filter(month == 8) %>%
  ggplot(aes(date, discharge_cfs)) +
  geom_point() +
  geom_line() +
  labs(y="Mean Monthly Discharge m^3/sec", x="Date")
aug.plot

Compare the plots

feb_aug.plot <- feb.plot +
                aug.plot +
                plot_layout(ncol =1)
feb_aug.plot

add trend lines as straight lines

feb_aug.plot <- feb.plot + geom_smooth(method="lm") +
                aug.plot + geom_smooth(method="lm") +
                plot_layout(ncol =1)
feb_aug.plot

How to see regression statistics

feb.model <- neversink_daily.df %>% 
  filter(month == 2) %>%
  lm(discharge_cfs ~ date, data=.)
summary(feb.model)

Call:
lm(formula = discharge_cfs ~ date, data = .)

Residuals:
   Min     1Q Median     3Q    Max 
-129.4  -86.5  -55.4    0.3 5925.8 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 1.585e+02  5.282e+00  30.007   <2e-16 ***
date        1.393e-03  5.713e-04   2.439   0.0148 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 233.5 on 2258 degrees of freedom
Multiple R-squared:  0.002627,  Adjusted R-squared:  0.002186 
F-statistic: 5.948 on 1 and 2258 DF,  p-value: 0.01481
aug.model <- neversink_daily.df %>% 
  filter(month == 8) %>%
  lm(discharge_cfs ~ date, data=.)
summary(aug.model)

Call:
lm(formula = discharge_cfs ~ date, data = .)

Residuals:
   Min     1Q Median     3Q    Max 
 -91.5  -61.5  -36.9   -2.6 7104.8 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 8.495e+01  4.794e+00  17.720  < 2e-16 ***
date        1.987e-03  5.152e-04   3.856 0.000118 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 220.2 on 2477 degrees of freedom
Multiple R-squared:  0.005966,  Adjusted R-squared:  0.005564 
F-statistic: 14.87 on 1 and 2477 DF,  p-value: 0.0001184
LS0tCnRpdGxlOiAiRWRkaWUgbW9kdWxlIHN0cmVhbSBkaXNjaGFyZ2UgZnJvbSBoYW5kb3V0IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKZWRpdG9yX29wdGlvbnM6IAogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUKLS0tCgojIFRoaXMgc2NyaXB0IGV4YW1pbmVzIHRoZSBkaXNjaGFyZ2UgaW4gTmV2ZXJzaW5rIENyLiAgICAgIApUaGlzIHNjcmlwdCB1c2VzIHRoZSBleGNlbCBzaGVldCBwcm92aWRlZCBpbiB0aGUgRWRkaWUgbW9kdWxlLiBJdCBpcyBwb3NzaWJsZSB0byBkb3dubG9hZCBkYXRhIGZyb20gVVNHUyBhbmQgcHV0IGl0IGluIGEgbmV3IGV4Y2VsIHNoZWV0IGZvbGxvd2luZyB0aGUgc2FtZSBmb3JtYXQgYW5kIHJlbmFtZSB0aGUgcGFydHMgb2YgdGhlIHNjcmlwdC4gWW91IGNhbiBhbHNvIHVzZSB0aGUgVVNHUyByZXRyaWV2YWwgcGFja2FnZSB0byBkb3dubG9hZCB1cCB0byBkYXRlIGRhdGEgZGlyZWN0bHkgZnJvbSBVU0dTLiAgICAgICAKCiMgSW5zdGFsbCBsaWJyYXJpZXMuICAgClRoZXNlIGFyZSB0aGUgbGlicmFyaWVzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIHNjcmlwdC4gVGhlc2UgYXJlIGluc3RhbGxlZCBvbmx5IG9uY2UgYW5kIHRoZW4gY2FuIGJlIGNvbW1lbnRlZCBvdXQgc28gdGhleSBkbyBub3QgcnVuIGluIGZ1dHVyZSBleGVjdWF0aW9ucyBvZiB0aGUgc2NyaXB0LgpgYGB7ciBpbnN0YWxsIHBhY2thZ2VzLCBtZXNzYWdlPVRSVUUsIHdhcm5pbmc9VFJVRX0KIyBodHRwczovL2dpdGh1Yi5jb20vVVNHUy1SL2RhdGFSZXRyaWV2YWwKCiMgZ2VuZXJhbCBSIHBhY2thZ2VzIHRvIGluc3RhbGwgaWYgeW91IGRvbnQgaGF2ZSB0aGVtCiMgcmVtb3ZlIHRoZSAiIyIgaWYgeW91IG5lZWQgdG8gcnVuIHRoZSBpbnN0YWxsYXRpb25zCgojIGluc3RhbGwucGFja2FnZXMoImRldnRvb2xzIikgIyBlc3NlbnRpYWwgaW4gaW5zdGFsbGluZyBvdGhlciB0aGlncwojIGluc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIpICMgaW5zdGFsbHMgYSBsb3Qgb2YgdGhpbmdzIGFuZCBnZ3Bsb3QKIyBpbnN0YWxsLnBhY2thZ2VzKCJzY2FsZXMiKSAjIGFsbG93cyBncmVhdCBzY2FsZSBmb3JtYXR0aW5nIG9uIGdncGxvdAojIGluc3RhbGwucGFja2FnZXMoImx1YnJpZGF0ZSIpICMgbWFrZXMgd29ya2luZyB3aXRoIGRhdGVzIGVhc2llcgojIGluc3RhbGwucGFja2FnZXMoImphbml0b3IiKSAjIGNsZWFuIG5hbWVzIG9mIGNvbHVtbnMgYW5kIG90aGVyIHRoaW5ncwojIGluc3RhbGwucGFja2FnZXMoInJlYWR4bCIpICMgcmVhZCBpbiBleGNlbCBmaWxlcwojIGluc3RhbGwucGFja2FnZXMoInBsb3RseSIpICMgaW50ZXJhY3RpdmUgcGxvdHMKIyBpbnN0YWxsLnBhY2thZ2VzKCJza2ltciIpCiMgaW5zdGFsbC5wYWNrYWdlcygicGF0Y2h3b3JrIikgIyBtdWx0aXBsZSBwbG90cwoKIyBzcGVjaWZpYyB0byB0aGlzIG1vZHVsZQojIGluc3RhbGwucGFja2FnZXMoImRhdGFSZXRyaWV2YWwiKSAjIFVTR1MgRGF0YSBSZXRyZWl2ZWFsIE1ldGhvZApgYGAKCgojIExvYWQgTGlicmFyaWVzICAgIApUaGlzIGNvZGUgbG9hZHMgdGhlIGxpYnJhcmllcyBmb3Igd29ya2luZyB3aXRoIHRoZSBkYXRhCmBgYHtyIGxhb2QgbGlicmFyaWVzLCBtZXNzYWdlPVRSVUUsIHdhcm5pbmc9VFJVRX0KIyBsb2FkIHRoZXNlIGV2ZXJ5IHRpbWUgIApsaWJyYXJ5KHRpZHl2ZXJzZSkgIyB0aGUgdGlkeXZlcnNlIGxpYnJhcnkgd2l0aCBtYW55IHN1YiBsaWJyYXJpZXMKbGlicmFyeShzY2FsZXMpICMgd29ya2luZyB3aXRoIGdncGxvdCBzY2FsZXMgCmxpYnJhcnkobHVicmlkYXRlKSAjIHdvcmtpbmcgd2l0aCBkYXRlcwpsaWJyYXJ5KGphbml0b3IpICMgY2xlYW5zIHVwIGV4Y2VsIGltcG9ydHMKbGlicmFyeShyZWFkeGwpICMgcmVhZCBpbiBleGNlbCBmaWxlcwpsaWJyYXJ5KHNraW1yKSAjIGRvZXMgc3VtbWFyeSBzdGF0cyBhbmQgb3RoZXIgdGhpbmdzCmxpYnJhcnkocGxvdGx5KSAjIG1ha2VzIGludGVyYWN0aXZlIHBsb3RzCmxpYnJhcnkocGF0Y2h3b3JrKSAjIGNvbWJpbmVzIG1hbnkgcGxvdHMgdG9nZXRoZXIKCiMgIyBsb2FkIHRoZSBVU0dTIHBhY2thZ2UKbGlicmFyeShkYXRhUmV0cmlldmFsKSAjIHV0aWxpdGllcyBmb3IgZG93bmxvYWRpbmcgYW5kIHdvcmtpbmcgd2l0aCBVU0dTIGRhdGEKYGBgCgojIFNvdXJjZSBvZiBOZXZlcnNpbmsgZGF0YQpUaGlzIGlzIHRoZSBkYXRhIHRoYXQgaXMgaW4gdGhlIGV4Y2VsIHNoZWV0IHRoYXQgaXMgdXNlZCBpbiB0aGlzIHNjcmlwdC4gICAgICAgIApodHRwczovL3dhdGVyZGF0YS51c2dzLmdvdi9ueS9ud2lzL3V2Lz9zaXRlX25vPTAxNDM1MDAwJlBBUkFtZXRlcl9jZD0wMDA2NSwwMDA2MCw2MzE2MAogClRoaXMgaXMgYWxsIG9mIHRoZSBkYXRhIHRoYXQgaXMgYXZhaWxhYmxlIGZvciB0aGUgc2l0ZS4gICAgICAgICAKaHR0cHM6Ly93YXRlcmRhdGEudXNncy5nb3Yvbndpcy9pbnZlbnRvcnkvP3NpdGVfbm89MDE0MzUwMDAmYWdlbmN5X2NkPVVTR1MKCgojIFJlYWQgaW4gVVNHUyBEYXRhClRoaXMgYWxsb3dzIHlvdSB0byByZWFkIGluIHRoZSBkYWlseSBtZWFuIGRhdGEgZm9yIHRoZSBVU0dTIHNpdGUuICAgICAgCk5vdGUgRW50ZXIgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhbmQgeW91IGNhbiBjaGFuZ2UgdGhpcyB0byBnZXQgZGlmZmVyZW50IHNpdGVzIG9yIHRpbWUgcmFuZ2VzOiAgICAgICAgCnNpdGVfbm86IHRoaXMgaXMgdGhlIHNpdGUgdGhhdCB5b3Ugd2FudCB0byBpbXBvcnQgICAgIApwYXJfY29kZTogIHRoZXNlIGFyZSB0aGUgcGFyYW10ZXIgY29kZSBudW1iZXJzIC0gMDAwNjAgaXMgZGlzY2hhcmdlICAgICAKICAgICAgICAgICBZb3UgY2FuIHJldHJlaXZlIG90aGVyIHZhcmlhYmxlcyB1c2luZzogICAgIAogICAgICAgICAgIGMoIjAwMDYwIiwgIjAwMDY1IikKICAgICAgICAgICAwMDA2NSBnYWdlIGhlaWdodCAKc3RhcnQuZGF0ZTogICAgCmVuZC5kYXRlOiAgICAKCmBgYHtyIHJlYWQgaW4gZmlsZX0KCiMgVGhlIHNpdGUgaXMgTmV2ZXJzaW5rIGFuZCB0aGUgc2l0ZSBudW1iZXIgaXMgMDE0MzUwMDAKIyBVU0dTIDAxNDM1MDAwIE5FVkVSU0lOSyBSSVZFUiBORUFSIENMQVJZVklMTEUgTlkKCnNpdGVfbm8gPC0gICAgICAgICAgIjAxNDM1MDAwIgpwYXJfY29kZSA8LSAgICAgICAgICIwMDA2MCIKc3RhcnQuZGF0ZSA8LSAgICAgICIxODAwLTAxLTAxIgplbmQuZGF0ZSA8LSAgICAgICAgIjIwNTAtMDEtMDEiCgpuZXZlcnNpbmtfZGFpbHkuZGYgPC0gcmVhZE5XSVNkdihzaXRlTnVtYmVycyA9IHNpdGVfbm8sCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlckNkID0gcGFyX2NvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IHN0YXJ0LmRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZERhdGUgPSBlbmQuZGF0ZSkKICAKIyByZW5hbWUgdGhlIGNvbHVtbnMKbmV2ZXJzaW5rX2RhaWx5LmRmIDwtIHJlbmFtZU5XSVNDb2x1bW5zKG5ldmVyc2lua19kYWlseS5kZikKYGBgCgojIHdlIG5lZWQgdG8gbWFrZSBhIGRhdGUgY29sdW1uIHRvIHBsb3Qgd2l0aApgYGB7cn0KbmV2ZXJzaW5rX2RhaWx5LmRmIDwtIG5ldmVyc2lua19kYWlseS5kZiAlPiUKICBzZWxlY3QoYWdlbmN5X2NkLCAKICAgICAgICAgc2l0ZV9ubywgCiAgICAgICAgIGRhdGUgPSBEYXRlLCAKICAgICAgICAgZGlzY2hhcmdlX2NmcyA9IEZsb3cpIApgYGAKCiMgd2UgbmVlZCB0byBtYWtlIGEgZGF0ZSBjb2x1bW4gdG8gcGxvdCB3aXRoCmBgYHtyfQpuZXZlcnNpbmtfZGFpbHkuZGYgPC0gbmV2ZXJzaW5rX2RhaWx5LmRmICU+JQogIG11dGF0ZShtb250aCA9IG1vbnRoKGRhdGUpKQpgYGAKCgoKIyBQbG90IGFsbCBkYXRhCmBgYHtyfQpxLnBsb3QgPC0gbmV2ZXJzaW5rX2RhaWx5LmRmICU+JSAKICBnZ3Bsb3QoYWVzKGRhdGUsIGRpc2NoYXJnZV9jZnMpKSArCiAgZ2VvbV9wb2ludChzaXplPTAuMSkgKwogIGdlb21fbGluZSgpCnEucGxvdApgYGAKCiMgUGxvdCBGZWJydWFyeSBkYXRhIApgYGB7cn0KZmViLnBsb3QgPC0gbmV2ZXJzaW5rX2RhaWx5LmRmICU+JSAKICBmaWx0ZXIobW9udGggPT0gMikgJT4lCiAgZ2dwbG90KGFlcyhkYXRlLCBkaXNjaGFyZ2VfY2ZzKSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDAuMSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHk9Ik1lYW4gTW9udGhseSBEaXNjaGFyZ2UgbV4zL3NlYyIsIHg9IkRhdGUiKQpmZWIucGxvdAogIApgYGAKCldlIGNhbiBtYWtlIGl0IGludGVyYWN0aXZlCmBgYHtyfQpnZ3Bsb3RseShmZWIucGxvdCkKYGBgCgoKQXVndXN0IGRhdGEKYGBge3J9CmF1Zy5wbG90IDwtIG5ldmVyc2lua19kYWlseS5kZiAlPiUKICBmaWx0ZXIobW9udGggPT0gOCkgJT4lCiAgZ2dwbG90KGFlcyhkYXRlLCBkaXNjaGFyZ2VfY2ZzKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9saW5lKCkgKwogIGxhYnMoeT0iTWVhbiBNb250aGx5IERpc2NoYXJnZSBtXjMvc2VjIiwgeD0iRGF0ZSIpCmF1Zy5wbG90CmBgYAoKIyBDb21wYXJlIHRoZSBwbG90cwpgYGB7cn0KZmViX2F1Zy5wbG90IDwtIGZlYi5wbG90ICsKICAgICAgICAgICAgICAgIGF1Zy5wbG90ICsKICAgICAgICAgICAgICAgIHBsb3RfbGF5b3V0KG5jb2wgPTEpCmZlYl9hdWcucGxvdApgYGAKCiMgYWRkIHRyZW5kIGxpbmVzIGFzIHN0cmFpZ2h0IGxpbmVzCmBgYHtyfQpmZWJfYXVnLnBsb3QgPC0gZmViLnBsb3QgKyBnZW9tX3Ntb290aChtZXRob2Q9ImxtIikgKwogICAgICAgICAgICAgICAgYXVnLnBsb3QgKyBnZW9tX3Ntb290aChtZXRob2Q9ImxtIikgKwogICAgICAgICAgICAgICAgcGxvdF9sYXlvdXQobmNvbCA9MSkKZmViX2F1Zy5wbG90CmBgYAoKIyBIb3cgdG8gc2VlIHJlZ3Jlc3Npb24gc3RhdGlzdGljcwpgYGB7cn0KZmViLm1vZGVsIDwtIG5ldmVyc2lua19kYWlseS5kZiAlPiUgCiAgZmlsdGVyKG1vbnRoID09IDIpICU+JQogIGxtKGRpc2NoYXJnZV9jZnMgfiBkYXRlLCBkYXRhPS4pCnN1bW1hcnkoZmViLm1vZGVsKQoKYGBgCgoKYGBge3J9CmF1Zy5tb2RlbCA8LSBuZXZlcnNpbmtfZGFpbHkuZGYgJT4lIAogIGZpbHRlcihtb250aCA9PSA4KSAlPiUKICBsbShkaXNjaGFyZ2VfY2ZzIH4gZGF0ZSwgZGF0YT0uKQpzdW1tYXJ5KGF1Zy5tb2RlbCkKCmBgYAoKCg==